From: Ewan Mellor Date: Fri, 23 Mar 2007 13:26:08 +0000 (+0000) Subject: Implement parsing of datetimes. X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~15277^2~19 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=6dcfe86140cefa9d91a55a9412f44b87fadb3b39;p=xen.git Implement parsing of datetimes. Signed-off-by: Ewan Mellor --- diff --git a/tools/libxen/src/xen_common.c b/tools/libxen/src/xen_common.c index f2c9644521..a22456c85e 100644 --- a/tools/libxen/src/xen_common.c +++ b/tools/libxen/src/xen_common.c @@ -16,12 +16,14 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +#define _XOPEN_SOURCE #include #include #include #include #include #include +#include #include #include @@ -493,16 +495,18 @@ static void destring(xen_session *s, xmlChar *name, const abstract_type *type, /** - * result_type : STRING => value : char **, the char * is yours. - * result_type : ENUM => value : int * - * result_type : INT => value : int64_t * - * result_type : FLOAT => value : double * - * result_type : BOOL => value : bool * - * result_type : SET => value : arbitrary_set **, the set is yours. - * result_type : MAP => value : arbitrary_map **, the map is yours. - * result_type : OPT => value : arbitrary_record_opt **, - * the record is yours, the handle is filled. - * result_type : STRUCT => value : void **, the void * is yours. + * result_type : STRING => value : char **, the char * is yours. + * result_type : ENUM => value : int * + * result_type : INT => value : int64_t * + * result_type : FLOAT => value : double * + * result_type : BOOL => value : bool * + * result_type : DATETIME => value : time_t * + * result_type : SET => value : arbitrary_set **, the set is yours. + * result_type : MAP => value : arbitrary_map **, the map is yours. + * result_type : OPT => value : arbitrary_record_opt **, + * the record is yours, the handle is + * filled. + * result_type : STRUCT => value : void **, the void * is yours. */ static void parse_into(xen_session *s, xmlNode *value_node, const abstract_type *result_type, void *value, @@ -625,6 +629,25 @@ static void parse_into(xen_session *s, xmlNode *value_node, } break; + case DATETIME: + { + xmlChar *string = string_from_value(value_node, "dateTime.iso8601"); + if (string == NULL) + { + server_error( + s, "Expected an DateTime from the server but didn't get one"); + } + else + { + struct tm tm; + memset(&tm, 0, sizeof(tm)); + strptime((char *)string, "%Y%m%dT%H:%M:%S", &tm); + ((time_t *)value)[slot] = (time_t)mktime(&tm); + free(string); + } + } + break; + case SET: { if (!is_container_node(value_node, "value") ||